import { ref } from 'vue'
import app from '@/app'
import base from '@/app/model'

import inboundModel from './inbound'
import taxModel from '@/plugin/config/model/tax'
import { countLimit } from '@/api/store/goods'

// 继承总模型
const model = new base;

// 供货商
model.supplier = ref([])

// 重置所有数据
model.empty = () => {
  // 清空商品
  model.setList([])

  // 初始化数据
  model.setData({
    code       : app.time.code(),
    name       : app.time.code(),
    count      : 0,
    goods      : []
  })
}


// 更新商品数量
model.updateCount = (count, append = false) => {
  count = parseInt(parseFloat(count))
  // 更新信息
  if(count) {
    // 如果是累计
    if(append) {
      count += model.getGoods().count
    }
    model.update(model.getIndex(),'count', count)
  }
}

// 更新商品进货价
model.updatePrice = (price) => {
  price = parseFloat(price)
  // 更新信息
  if(price) {
    model.update(model.getIndex(),'price', price)
  }
}

// 更新商品税后成本
model.updatePriceTax = (price) => {
  price = parseFloat(price)
  // 更新信息
  if(price) {
    model.getGoods().price_tax = price
    // 反推税前
    model.update(model.getIndex(),'price', app.math.factory(price).divpro(model.getGoods().tax).format(4))
  }
}

// 更新商品
model.update = (index, key, value) => {
  // 商品
  const goods = model.getList()[index]
  if(goods) {
    // 更新值
    goods[key] = value
    // 更新统计
    model.total()
  }
}

// 统计商品
model.total = () => {
  let count = 0
  model.getList().forEach(item => {
    // 算出税后
    item.price_tax = app.math.addpro(item.price, item.tax)
    count += item.count
  })

  // 保存原总价和总数量
  model.getData().count = count

  console.log(model.getData())
  console.log(model.getList())
}

// 加入商品
model.add = goods => {
  // 查找已添加的索引
  let index = model.getList().findIndex(item => item.goods_id == goods.id)
  // 插入商品
  if(index === -1) {
    // 拿到插入后的长度 - 1 就为索引
    index = model.getList().push({
      goods_id    : goods.id,
      goods_number: goods.number,
      goods_name  : goods.name,
      goods_code  : goods.code,
      goods_image : goods.image,
      count       : 0,
      price       : goods.price_cost,
      price_tax   : 0,
      unit        : goods.unit,
      unit_count  : goods.unit_count,
      tax         : taxModel.tax(goods.tax_id),
    }) - 1
  }

  model.addHandle(index)
}

// 按条形码加入
model.addCode = code => {
  const index = model.getList().findIndex(item => item.goods_code == code)

  if(index > -1) {
    return model.addHandle(index)
  }
}

// 加入商品处理
model.addHandle = index => {
  // 重新索引商品
  model.indexGoods(index)

  // 当前商品操作
  model.updateCount(1, true)
  return true
}

// 删除商品
model.del = index => {
  model.getList().splice(index, 1)
  // 重新索引商品
  model.indexGoods(index)
  // 重新统计
  model.total()
}

// 当前商品
model.index = ref(0)
model.goods = ref({})

// 当前商品
model.getGoods = () => {
  return model.goods.value
}

// 当前商品索引
model.getIndex = () => {
  return model.index.value
}

// 索引商品
model.indexGoods = index => {
  // 判断长度
  if(index >= 0) {
    if(index >= model.getList().length) {
      index--
    }
    // 保存当前操作商品
    model.index.value = index
    model.goods.value = model.getList()[index]
  }
}

// 提交
model.post = () => {
  // 整理数据
  const data = model.getData()
  data.goods = model.getList()
  return new Promise((resolve, jeject) => {
    inboundModel.create(data).then(() => {
      // 更改库存
      countLimit(data.goods, false, true).then(() => {
        // 重置数据
        model.empty()
        resolve()
      })
    }).catch(() => jeject)
    
  })
}

// 初始模型
model.empty()

export default model